package top.lshaci.learning.springboot.mqtt.properties;

import lombok.Data;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.NotBlank;

/**
 * MqttProperties
 *
 * @author liangxu
 */
@Data
@Validated
@ConfigurationProperties("spring.mqtt")
public class MqttProperties {
    /**
     * MQTT服务器地址
     */
    @NotBlank
    private String serverUri;
    /**
     * 用户名
     */
    @NotBlank
    private String username;
    /**
     * 密码
     */
    @NotBlank
    private String password;
    /**
     * 清除会话
     */
    private boolean cleanSession = MqttConnectOptions.CLEAN_SESSION_DEFAULT;
    /**
     * 保持活动时间间隔（秒）
     */
    private int keepAliveInterval = MqttConnectOptions.KEEP_ALIVE_INTERVAL_DEFAULT;
    /**
     * 连接超时时间（秒）
     */
    private int connectionTimeout = MqttConnectOptions.CONNECTION_TIMEOUT_DEFAULT;
    /**
     * 自动重连
     */
    private boolean automaticReconnect = false;
    /**
     * 最大重连时间延迟
     */
    private int maxReconnectDelay = 128000;
    /**
     * 客户端ID
     */
    private String clientId;
    /**
     * 默认主题
     */
    private String defaultTopic;
    /**
     * 消费者信息
     */
    private Consumer consumer;

    /**
     * MQTT服务器地址
     *
     * @return MQTT服务器地址
     */
    public String[] serverUris() {
        return serverUri.split(",");
    }

    @Data
    public static class Consumer {
        /**
         * 默认监听主题
         */
        private String defaultTopic;
        /**
         * 消费者客户端ID
         */
        private String clientId;
        /**
         * 恢复时间间隔
         */
        private int recoveryInterval = 10_000;
        /**
         * 完成超时（毫秒）
         */
        private long completionTimeout = MqttPahoMessageDrivenChannelAdapter.DEFAULT_COMPLETION_TIMEOUT;
        /**
         * 断开连接完成超时（毫秒）
         */
        private long disconnectCompletionTimeout = MqttPahoMessageDrivenChannelAdapter.DISCONNECT_COMPLETION_TIMEOUT;

        /**
         * 默认监听主题
         *
         * @return 默认监听主题
         */
        public String[] defaultTopic() {
            return defaultTopic.split(",");
        }

    }
}
